package MethodReference;

import java.util.ArrayList;
import java.util.Collections;

public class 引用其他类的成员方法 {
    public static void main(String[] args) {
        /*
        格式:
            1.其他类: 其他类对象::方法名
            2.本类: this::方法名
            3.父类: super::方法名

        注意:2和3因为main为静态方法static所以无法使用
         */
        //创建集合
        ArrayList<String> list=new ArrayList<>();
        //添加数据
        Collections.addAll(list,"张无忌","张三丰","赵敏","张强","马超");
        //过滤操作
//        list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));

//        list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张")&&s.length()==3;
//            }
//        }).forEach(s-> System.out.println(s));


        //1.其他类: 其他类对象::方法名
        list.stream()
                .filter(new StringOperation()::stringJudge)
                .forEach(s-> System.out.println(s));

        //2.本类: this::方法名
//        list.stream()
//                .filter(this::stringJudge)//报错原因 : 静态方法没有this
//                .forEach(s-> System.out.println(s));

    }

    public boolean stringJudge(String s){
        return s.startsWith("张")&&s.length()==3;
    }
}
